"use strict";

/**
 * 校验值是否为null、undefined、空字符串
 * 设计思想：部分场景下，我们希望判断一个值是否为无效的值，如果是则过滤掉，接口层面就不传给后端了。
 *
 * @since 0.0.4
 * @category 正则
 * @param {string|number} str 需要校验的字符串.
 * @param {object} config 配置参数.
 * @param {boolean} config.isDetail 是否返回详细信息, 为true时返回CheckResult, false时返回boolean 默认: false.
 *
 * @returns { boolean|CheckResult } 校验结果 或 结果对象.
 *
 * @typedef {object} CheckResult
 * @property {boolean} status 校验结果
 * @property {string} errorMsg 错误提示
 * @property {RexExp} reg 校验数据使用的RexExp对象
 *
 * @example
 *
 * z.isNils('')
 * // => true
 *
 * z.isNils(null, {isDetail: true})
 * // { status: true, errorMsg: '值为空值' }
 *
 */
function isNils(str) {
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
      _ref$isDetail = _ref.isDetail,
      isDetail = _ref$isDetail === void 0 ? false : _ref$isDetail;

  var rt = {
    status: true,
    errorMsg: ''
  }; // 逻辑判断

  if (typeof str === 'string' && !str.length) {
    // 空字符串
    rt.errorMsg = '值为空值';
  } else if (typeof str === 'undefined') {
    // undefined
    rt.errorMsg = '值为undefined';
  } else if (str === null) {
    // null
    rt.errorMsg = '值为null';
  } else {
    // 通过校验
    rt.status = false;
  }

  return isDetail ? rt : rt.status;
}

module.exports = isNils;